package com.fzn.fznspringboot;

import com.fzn.fznspringboot.config.FznConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

/**
 * @program: spring-boot
 * 描述：      容器初始化器
 * 功能：
 * 1. 创建我们的spring容器    和  关联spring容器的配置
 * 2. 完成的spring配置的创建和依赖注入
 * 3. 创建前端控制器 DispatcherServlet 并让她持有spring容器
 * 4. 就可以进去分发 就可以进行分发隐射 springmvc的底层机制
 * 5. onStartup 是tomcat调用 并把ServletContext对象传入
 * @author: fzn
 * @create: 2022-11-23 00:51
 **/
public class FznWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        System.out.println("startup...");
        // 加载Spring web application configuration  就是一个容器
        AnnotationConfigWebApplicationContext ac =
                new AnnotationConfigWebApplicationContext();
        // 在ac中注册配置类
        ac.register(FznConfig.class);
        // 完成bean的创建和配置
        ac.refresh();
        // 创建注册的前端控制器   让它持有这个容器
        DispatcherServlet dispatcherServlet = new DispatcherServlet(ac);
        // 返回了动态注册对象
        ServletRegistration.Dynamic registration = servletContext.addServlet("app", dispatcherServlet);
        // 让tomcat启动的时候自动加载 dispatcherServlet
        registration.setLoadOnStartup(1);
        // 设置拦截的请求
        registration.addMapping("/");

    }
}